unset on unknown variable is not an error, 
see http://www.opengroup.org/onlinepubs/009695399/utilities/unset.html
(from PLD)

Index: pdksh-5.2.14/c_sh.c
===================================================================
--- pdksh-5.2.14.orig/c_sh.c	2008-04-15 20:51:18.000000000 +0200
+++ pdksh-5.2.14/c_sh.c	2008-04-15 20:56:22.000000000 +0200
@@ -688,16 +688,13 @@
 		if (unset_var) {	/* unset variable */
 			struct tbl *vp = global(id);
 
-			if (!(vp->flag & ISSET))
-			    ret = 1;
 			if ((vp->flag&RDONLY)) {
 				bi_errorf("%s is read only", vp->name);
 				return 1;
 			}
 			unset(vp, strchr(id, '[') ? 1 : 0);
 		} else {		/* unset function */
-			if (define(id, (struct op *) NULL))
-				ret = 1;
+			define(id, (struct op *) NULL);
 		}
 	return ret;
 }
